When deploying virtualized applications to one or more host computers in a cloud infrastructure, it is often required that certain customized configurations be performed, depending on the cloud provider of the infrastructure. Examples of different cloud providers include, but are not limited to, VMware vCloud® Automation Center, Amazon EC2®, and Microsoft® Azure. Since an infrastructure provider typically does not have knowledge of the actual applications deployed to it, it is usually left to an application designer to generate a deployment process that handles the required customized configuration. However, at the time an application is modeled, the designer does not possess complete knowledge of the target infrastructure. For instance, the deployment of certain network-based applications require internet protocol (IP) addresses of already-deployed server applications, or mount points for data storage devices on which infrastructure-specific configuration data may be stored. With a variety of different provider platforms, the problem of configuring and deploying applications for each platform has become a challenge for application designers.
A specific problem arises when IP addresses are allocated dynamically to virtual machines provisioned in a cloud infrastructure. Configuration of complex, multi-tiered applications often require IP addresses of provisioned virtual machines. For example, a load balancing application typically needs to connect to individual virtual machines deployed to a cloud at install/configuration time. Since the application designer does not know in advance what the IP addresses of the provisioned virtual machines are, just prior to application deployment, the IP addresses of the provisioned virtual machines need to be determined and the installation configuration data updated accordingly before installation of the load balancing application.
In addition, application deployment is currently performed using a simple queuing model. That is, deployment requests are often transmitted from a deployment platform to a cloud infrastructure without regard to whether certain previously transmitted tasks have completed. However, certain deployment tasks are dependent on the completion of previously transmitted tasks. In such cases, if task dependency is not enforced, then certain deployment tasks may be transmitted to a cloud infrastructure prematurely and, as a result, may fail. Therefore, a need has arisen to organize cloud application deployments in phases, where each phase consists of tasks that may be transmitted as a group, and where tasks in each phase may not begin until it is determined that all tasks of a preceding phase have completed executing.